package pl.wr.physics.units.SI;

import pl.wr.math.number.Fraction;

/**
 * SI (International System of Units) standard prefixes
 * 
 * @author wieslaw.rodak
 * @version 1.0
 */
public enum Prefix {

	/**
	 * basic (10<sup>0</sup>)
	 */
	basic(new Fraction(1, 1, 0)),
	/**
	 * deca- (10<sup>1</sup>)
	 */
	da(new Fraction(1, 1, 1)),
	/**
	 * hecto- (10<sup>2</sup>)
	 */
	h(new Fraction(1, 1, 2)),
	/**
	 * kilo- (10<sup>3</sup>)
	 */
	k(new Fraction(1, 1, 3)),
	/**
	 * mega- (10<sup>6</sup>)
	 */
	M(new Fraction(1, 1, 6)),
	/**
	 * giga- (10<sup>9</sup>)
	 */
	G(new Fraction(1, 1, 9)),
	/**
	 * tera- (10<sup>12</sup>)
	 */
	T(new Fraction(1, 1, 12)),
	/**
	 * peta- (10<sup>15</sup>)
	 */
	P(new Fraction(1, 1, 15)),
	/**
	 * exa- (10<sup>18</sup>)
	 */
	E(new Fraction(1, 1, 18)),
	/**
	 * zetta- (10<sup>21</sup>)
	 */
	Z(new Fraction(1, 1, 21)),
	/**
	 * yotta- (10<sup>24</sup>)
	 */
	Y(new Fraction(1, 1, 24)),
	/**
	 * deci- (10<sup>-1</sup>)
	 */
	d(new Fraction(1, 1, -1)),
	/**
	 * centi- (10<sup>-2</sup>)
	 */
	c(new Fraction(1, 1, -2)),
	/**
	 * mili- (10<sup>-3</sup>)
	 */
	m(new Fraction(1, 1, -3)),
	/**
	 * mikro- (10<sup>-6</sup>)
	 */
	μ(new Fraction(1, 1, -6)),
	/**
	 * nano- (10<sup>-9</sup>)
	 */
	n(new Fraction(1, 1, -9)),
	/**
	 * piko- (10<sup>-12</sup>)
	 */
	p(new Fraction(1, 1, -12)),
	/**
	 * femto- (10<sup>-15</sup>)
	 */
	f(new Fraction(1, 1, -15)),
	/**
	 * atto- (10<sup>-18</sup>)
	 */
	a(new Fraction(1, 1, -18)),
	/**
	 * zepto- (10<sup>-21</sup>)
	 */
	z(new Fraction(1, 1, -21)),
	/**
	 * yocto- (10<sup>-24</sup>)
	 */
	y(new Fraction(1, 1, -24));

	private final Fraction value;

	private Prefix(Fraction value) {
		this.value = value;
	}

	public Fraction getValue() {
		return value;
	}
}
